package br.ufrgs.inf.dsmoura.repository.model.dao; import java.io.Serializable; import java.util.List; import javax.persistence.EntityManager; import javax.persistence.EntityTransaction; import javax.persistence.Persistence; import javax.persistence.RollbackException; public class GenericDAO implements DAO { private static GenericDAO instance; public synchronized static GenericDAO getInstance() { if (instance == null) { instance = new GenericDAO(); } return instance; } protected EntityManager createEntityManager() { return Persistence.createEntityManagerFactory("lavoi").createEntityManager(); } public Serializable insert(Serializable entity) { EntityManager entityManager = createEntityManager(); EntityTransaction transaction = entityManager.getTransaction(); if ( ! transaction.isActive() ) { transaction.begin(); } try { entityManager.persist(entity); transaction.commit(); return entity; } catch (RollbackException rE) { throw rE; } catch (Exception e) { transaction.rollback(); throw new RuntimeException(e); } } public Serializable update(Serializable entity) { EntityManager entityManager = createEntityManager(); EntityTransaction transaction = entityManager.getTransaction(); transaction.begin(); try{ entityManager.merge(entity); transaction.commit(); return entity; } catch (RollbackException rE) { throw rE; } catch(Exception e){ transaction.rollback(); throw new RuntimeException(e); } } @SuppressWarnings({ "unchecked", "rawtypes" }) public Serializable findUnique(Class entityClass, Integer entityPk) { EntityManager entityManager = createEntityManager(); return entityManager.find(entityClass, entityPk); } public List<Serializable> listAll(Serializable entity) { throw new RuntimeException("this method is not implemented."); } public Serializable delete(Serializable entity) { EntityManager entityManager = createEntityManager(); EntityTransaction transaction = entityManager.getTransaction(); transaction.begin(); try { entityManager.remove(entity); transaction.commit(); return entity; } catch (RollbackException rE) { throw rE; } catch (Exception e) { transaction.rollback(); throw new RuntimeException(e); } } }